<?php
namespace Home\Controller;
use Think\Controller;
use GatewayClient\Gateway;
vendor('Gateway.Gateway');
# Socket 相关控制器 只处理socket相关操作
class SocketController extends Controller
{
    # 注册地址
    public static $registerAddress  = '123.56.159.143:1238';//正式
    // public static $registerAddress  = '39.107.157.183:1238';//测试

    # 初始构造函数
    public function _initialize()
    {
        Gateway::$registerAddress   = static::$registerAddress;
    }

    # 绑定用户
    public function bind()
    {
        header("Access-Control-Allow-Origin: *");
        $client_id  = I('post.client_id');
        $uid        = I('post.uuid');
        if (!empty($client_id) && !empty($uid)) {
            Gateway::bindUid($client_id,$uid);
        }
    }

    # 绑定用户分组
    public function bind_group()
    {
        header("Access-Control-Allow-Origin: *");
        $client_id  = I('post.client_id');
        $group_id   = I('post.group_id');
        $uid        = I('post.uuid');
        $group_id   = explode(',',$group_id);
        if (!empty($client_id) && !empty($uid)) {
            Gateway::bindUid($client_id,$uid);
            foreach ($group_id as &$vo) {
                Gateway::joinGroup($client_id,$vo);
            }
        }
    }

    # 获取全局所有在线的uid列表
    public function get_uuid_list()
    {
        return Gateway::getAllUidList();
    }

    # 获取某个分组的在线uid列表
    public function get_uuid_in_group($group)
    {
        return Gateway::getUidListByGroup($group);
    }

    # 向所有客户端所有人发送数据
    public function send_to_all($message)
    {
        Gateway::sendToAll(json_encode($message,true));
    }

    # 向指定用户组发送消息 如果group为数组 向数组中所有group发送数据
    public function send_to_group($group,$message)
    {
        Gateway::sendToGroup($group,json_encode($message,true));
    }

    # 向uid所有绑定的group_id发送消息 如果uid为数组 给数组所有uid发送
    public function send_to_uid($uid,$message)
    {
        # 判断uid是否为数组 如果为数组 检测数据 如果数组不为空 则发送数据
        if (is_array($uid)) {
            for ($i=0; $i < count($uid); $i++) {
                if (!empty(Gateway::getClientIdByUid($uid))) {
                    Gateway::sendToUid($uid,json_encode($message,true));
                }
            }
        }else{
            if (!empty(Gateway::getClientIdByUid($uid))) {
                Gateway::sendToUid($uid,json_encode($message,true));
            }
        }
    }
}